#include <QCoreApplication>
#include <QFile>
#include <qsettings.h>
#include "mdxserver.h"
#include "mlog.h"
#include "base.h"

#include <qdebug.h>


#define CFGNAME "rzld.cfg"
#define MODNAME "Main"


int main(int argc, char ** argv){
    QCoreApplication app(argc,argv);
#ifdef Q_OS_MAC
    // русские буковки в консоли. для никсов с utf8
    QTextCodec *codec1 = QTextCodec::codecForName("UTF-8");
    QTextCodec::setCodecForLocale(codec1);
    QTextCodec::setCodecForTr(codec1);
    QTextCodec::setCodecForCStrings(codec1);
#endif
#ifdef Q_OS_UNIX
    // русские буковки в консоли. для никсов с utf8
    QTextCodec *codec2 = QTextCodec::codecForName("UTF-8");
    QTextCodec::setCodecForLocale(codec2);
    QTextCodec::setCodecForTr(codec2);
    QTextCodec::setCodecForCStrings(codec2);
#endif
#ifdef Q_OS_LINUX
    // русские буковки в консоли. для никсов с utf8
    QTextCodec *codec3 = QTextCodec::codecForName("UTF-8");
    QTextCodec::setCodecForLocale(codec3);
    QTextCodec::setCodecForTr(codec3);
    QTextCodec::setCodecForCStrings(codec3);
#endif


    // парсим параметры
    QString configPath=QCoreApplication::applicationDirPath()+"/"+CFGNAME;

    for(int i = 0 ; i < QCoreApplication::arguments().count() ; i++){
        QString arg = QCoreApplication::arguments().at(i);
                // конфиг
                if(arg == "-c" or arg == "--config"){
                    if(QCoreApplication::arguments().count()>i){
                        configPath = QCoreApplication::arguments().at(i+1);
                    }
                }else{

                    if(arg.mid(0,9)=="--config="){
                        configPath= arg.split("=").at(1);
                    }
                }

    }

    MLog logger;

    // проверяем наличие файла конфига
    if(!QFile::exists(configPath)){
        logger.slotPut(MODNAME,1,"Error - config file not exist. exit.");
        exit(11);
    }
    // открываем конфиг.
    QSettings cfg(configPath,QSettings::IniFormat);

    logger.setLevel(cfg.value("loglevel",3).toInt());
    logger.slotPut(MODNAME,3,"start");


    QString logfile = cfg.value("logfile","").toString();
    if(!logfile.isEmpty()){
        logger.setFile(logfile);
    }

    MDxserver server;
    server.connect(&server,SIGNAL(sigLog(QString,int,QString)),&logger,SLOT(slotPut(QString,int,QString)));
    server.setPort(cfg.value("port",7777).toInt());
    server.setBase(cfg.value("dbaddr","").toString(),cfg.value("dbuser","").toString(),
                   cfg.value("dbpass","").toString(),cfg.value("dbname","").toString(),
                   cfg.value("dbport",3306).toInt());
    server.setSessionTtl(cfg.value("session_ttl",600).toInt());
    server.setReticketEvent(cfg.value("reticket_if_oldevent",false).toBool());
    server.start(cfg.value("ping_db",60).toInt());

    return app.exec();
}
